spring 接口有两个实现类的情况下@Autowired 如何区分使用哪个 | 您所在的位置:网站首页 › spring 一个接口多个实现类怎么注入 › spring 接口有两个实现类的情况下@Autowired 如何区分使用哪个 |
接口: public interface UserService { void add(); }实现类: @Component public class UserServiceFestival implements UserService { @Override public void add() { System.out.println("注册用户发送优惠券..."); } } @Component public class UserServiceNormal implements UserService { public void add() { System.out.println("添加用户..."); } }解决方法: UserService -> UserServiceNormal @Autowired private UserServiceNormal userService;或者:Primary确定哪个实现类为首选 @Component @Primary public class UserServiceFestival implements UserService { @Override public void add() { System.out.println("注册用户发送优惠券..."); } }或者:限定符 @Component @Qualifier("festival") public class UserServiceFestival implements UserService { @Override public void add() { System.out.println("注册用户发送优惠券..."); } } @Component @Qualifier("normal") public class UserServiceNormal implements UserService { public void add() { System.out.println("添加用户..."); } }或者:推荐使用首选方案 @Component("festival") public class UserServiceFestival implements UserService { @Override public void add() { System.out.println("注册用户发送优惠券..."); } } @Component("normal") public class UserServiceNormal implements UserService { public void add() { System.out.println("添加用户..."); } }测试类需要这么写: @Autowired @Qualifier("normal") // 对应的 private UserService userService;或者 @Resource(name=“normal”) = @Autowired + @Qualifier(“normal”) @Resource(name="normal") private UserService userService;另外:Component 注解 默认id 是 首字母小写的类名。(userServiceNormal 或者 userServiceFestival ) |
CopyRight 2018-2019 实验室设备网 版权所有 |